/* FileException.h
 * 
 *  Author          : Alexander J. Yee
 *  Date Created    : 09/17/2014
 *  Last Modified   : 04/11/2017
 * 
 */

#pragma once
#ifndef ymp_FileIO_FileException_H
#define ymp_FileIO_FileException_H
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
//  Dependencies
#include <string>
#include "PublicLibs/Exceptions/Exception.h"
namespace ymp{
namespace FileIO{
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
class FileException : public Exception{
    YMP_EXCEPTION_DECLARATIONS()

public:
    FileException(const char* function, std::string path, std::string message);
    FileException(int code, const char* function, std::string path, std::string message);

    virtual void print() const override;

public:
    //  Serialization
    FileException(SerializationPassKey key, const char*& stream);
    virtual void serialize(std::string& stream) const override;

protected:
    std::string m_function;
    std::string m_message;
    std::string m_path;
    int m_code;
};
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
}
}
#endif
